﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _12_Task_async和await
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {

            //async 和 await 是 C# 中用于处理异步编程的关键字,它们可以让你的代码更加简洁和易读

            //async 用于修饰方法，表示包含的异步操作（不在主线程上进行操作，也就不会对主线程进行阻塞）
            //一个被async修饰的方法，可以包含一个或多个await表达式

            //await 用于暂停 async 方法的执行，等待异步操作完成，然后继续执行 async 方法
            //await 只能在 async 方法中使用
            //当awit等待的任务完成后，方法会从await的位置继续执行


            //获取左操作数
            int left = int.Parse(textBox1.Text);
            //获取右操作数
            int right = int.Parse(textBox2.Text);
            //调用Add方法完成计算
            int result = await Add(left, right);
            //显示计算结果
            this.textBox3.Text = result.ToString();
        }

        public static Task<int> Add(int left, int right)
        {
            return Task.Run(() => 
            {
                Thread.Sleep(3000);//模拟计算耗时
                return left + right;
            });

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.toolStripStatusLabel2.Text = DateTime.Now.ToString();
        }
    }
}
